import router from '@/router'
import { useLoginUserStore } from '@/stores/loginUser'
import ACCESS_ENUM from './accessEnum'
import checkAccess from './checkAccess'

// 全局路由守卫
router.beforeEach(async (to, from, next) => {
  // 必须在路由守卫内部获取 store，确保 pinia 已经初始化
  const loginUserStore = useLoginUserStore()
  let loginUser = loginUserStore.loginUser
  // 获取当前路由需要的权限，默认为不需要登录
  const needAccess = (to.meta?.access as string) ?? ACCESS_ENUM.NOT_LOGIN

  // 如果是首次进入页面或用户信息不完整，尝试自动登录
  if (!loginUser || !loginUser.userRole) {
    // 自动获取登录用户信息
    await loginUserStore.fetchLoginUser()
    loginUser = loginUserStore.loginUser
  }

  // 如果页面需要登录权限
  if (needAccess !== ACCESS_ENUM.NOT_LOGIN) {
    // 如果用户未登录，跳转到登录页面
    if (!loginUser || !loginUser.userRole) {
      next(`/user/login?redirect=${to.fullPath}`)
      return
    }

    // 如果用户已登录，但权限不足，跳转到无权限页面
    if (!checkAccess(loginUser, needAccess)) {
      next('/noAuth')
      return
    }
  }

  // 权限校验通过，允许访问
  next()
})
